"""
# arxiv的字段对应的内容
# entry_id A url http://arxiv.org/abs/{id}。
# updated 当结果最后一次更新的时间。
# published 结果最初发布的时间。
# title 结果的标题。
# authors 结果的作者，作为 arxiv.Authors。
# summary 结果的摘要。
# comment 如果有的话，作者的评论。
# journal_ref 如果有的话，期刊引用。
# doi 如果有的话，解析到外部资源的DOI的URL。
# primary_category 结果的主要arXiv类别。参见arXiv: 类别体系结构[4]。
# categories 结果的所有类别。参见arXiv: 类别体系结构。
# links 与此结果相关的最多三个URL，作为 arxiv.Links。
# pdf_url 如果有的话，结果的PDF的URL。注意：这个URL也出现在 result.links 中。
"""
from typing import List
import asyncio
from pydantic import BaseModel
import requests
import json

class AminerResult(BaseModel):
    id: str
    keywords: List[str]
    title: str
    doi: str
    abstract_zh: str
    year: str

class AminerSearch:
    def __init__(self):
        self.token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjEwMzcxODEwNTQ0LCJ0aW1lc3RhbXAiOjE3MzE4MTA1NDQsInVzZXJfaWQiOiI2NzM5NTI3YWVjZmU1YWY4NGNjMTBlMmEifQ.3LMykpN9dmZPciS23rvTaam9WKMdCY4JZNLrdrMyg30"
        self.url = "https://datacenter.aminer.cn/gateway/open_platform/api/v3/paper/list/citation/by/keywords"

    async def aminer_search(self, page: int, size: int, keywords: str):
        headers = {"Authorization": "Bearer " + self.token}
        keywords = json.dumps([keywords], ensure_ascii=False)
        search = requests.get(url=self.url, headers=headers, params={"page": page, "size": size, "keywords": keywords})
        result_list = []
        for result in json.loads(search.text)['data']:
            result_obj = AminerResult(**result)
            result_list.append(result_obj)
        return result_list

    async def run(self, input_text):
        total_result = ""
        result_list = await self.aminer_search(page=0, size=5, keywords=input_text)
        for i in result_list:
            total_result += i.title + "\n"
        return total_result


if __name__ == '__main__':
    input_text = input('输入你的论文查询方向：')
    aminersearch = AminerSearch()
    result = asyncio.run(aminersearch.run(input_text))
    print(result)

